1. Field of the Invention
The field of this invention relates to unitary data structure systems, methods, and computer program products, for global register conflict determination; and more particularly to the indication of global register usage and the detection of usage conflicts in global registers using information contained in a unitary data structure.
2. Description of Related Art
Operational flexibility in computer systems is increased by designating one or more of the computer system registers as global in scope. Local registers, unlike global registers, have a scope limited to the particular module or subroutine. In other words, these registers are used by the entire computer program and not just by particular modules or subroutines. Particular global variables or symbols are used in connection with these global registers.
Software programs are often constructed from individual pieces that are each compiled separately, causing misreferencing and incorrect scoping of variables when global registers are improperly called. The software programs particularly incorporate code from one or more libraries. This library code is compiled separately, compounding the misreferencing and scoping problems which arise. One severe technical problem arises when different portions of a particular program use a certain global register for different variable values. Such different and conflicting usages for the same global register tend to cause incorrect results during program execution, because the wrong variable value will be in the global register at the wrong time.
According to the present invention, separately compiled software units expressly indicate their global register usage in a unitary data structure which contains information associating and characterizing global registers and variables. The unitary data structure is read by the static and dynamic linkers performing linking operation to detect conflicts of usage incident to compilation. According to one embodiment of the present invention, a unitary data structure (UDS) is established to expressly indicate particular symbol table entries which associate a global symbol with a particular global register. The xe2x80x9cnamexe2x80x9d portion of the UDS, points to a string that contains the name of the symbol, or else contains a NULL pointer to indicate that the register is used for scratch. The xe2x80x9cvaluexe2x80x9d portion of the symbol table entry indicates the particular register to which this entry applies.
According to the present invention, a compiler generates UDS entries to indicate how a containing object file uses particular application-reserved global registers. The static linker checks the UDS entries for all object files being combined into a particular target object file to ensure that the global registers referenced by the different source elements are used compatibly. The resulting object file produced includes these UDS entries to indicate the resulting object global register usage. According to the present invention, the static linker warns if any global registers is used in a fashion incompatible with the object being built. According to the present invention, the static linker generates a warning, if a shared object file is being built that uses application-reserved global registers. A similar warning is issued according to the present invention by an archiver, if an archive library is built containing object file that use application-reserved global registers. A dynamic linker according to the present invention checks to ensure that all object files being bound into a selected executable process have compatible uses of application-reserved global registers.
According to the present invention, a system and method for compiling and linking a source file includes a compiler for generating a UDS which associates particular global symbols with corresponding global registers for holding variable information pertaining to global symbols referenced or defined in particular source files. The UDS information is sufficient to enable a linker to resolve class definitions and to perform class relocation operations. The UDS information is included in the object file generated by the compiler according to one embodiment of the present invention. The compiler particularly generates object files such that identification of usage conflicts and performance of relocation operations are delayed until operation of the linker. A linker links the object file with other object files and shared libraries to thereby generate either an executable file or a shared library. The list of other object files and shared libraries may be empty, in which case the linker generates the executable file or shared library from the single object file. The linker uses the information contained in the object file to identify usage conflicts and to perform relocation operations.